package testes;

import static org.junit.Assert.*;
import iscte.es.copaPaises.businessLayer.Cidade;
import iscte.es.copaPaises.businessLayer.Estadio;
import iscte.es.copaPaises.businessLayer.Pais;

import java.util.HashSet;
import java.util.Set;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;

public class CidadeTest {
	private Cidade c;
	private boolean capital;
	private String nome;
	private int populacao;
	private Pais pais;

	@BeforeClass
	public static void setUpBeforeClass() throws Exception {
	}

	@AfterClass
	public static void tearDownAfterClass() throws Exception {
	}

	@Before
	public void setUp() throws Exception {
		c=new Cidade();
		capital=false;
		nome="Budapeste";
		populacao=30000;
		pais=new Pais();
	}

	@After
	public void tearDown() throws Exception {
	}

	@Test
	public void testCidade() {
		assertTrue("Cidade()",Cidade.allInstances.contains(c));
	}

	@Test
	public void testCidadeBooleanStringIntPais() {
		c=new Cidade( capital,  nome,  populacao,  pais);
		assertTrue("Cidade()",Cidade.allInstances.contains(c));
	}

	@Test
	public void testCapital() {
		c.setCapital(true);
		assertEquals("Setter/Getter Cidade.capital()",c.capital(),true);
	}

	@Test
	public void testNome() {
		c.setNome(nome);
		assertEquals("Setter/Getter Cidade.nome()",c.nome(),nome);
	}

	@Test
	public void testPopulacao() {
		c.setPopulacao(populacao);
		assertEquals("Setter/Getter Cidade.poupulacao()",c.populacao(),populacao);
	}

	@Test
	public void testPais() {
		c.setPais(pais);
		assertEquals("Setter/Getter Cidade.pais()",c.pais(),pais);
	}

	@Test
	public void testEstadios() {
		Estadio e1=new Estadio();
		Estadio e2=new Estadio();
		Estadio e3=new Estadio();
		Set<Estadio> estadios=new HashSet<Estadio>();
		estadios.add(e1);estadios.add(e2);
		c.setEstadios(estadios);
		assertEquals("Setter/Getter Continente.estadios()",estadios,c.estadios());
	}

	@Test
	public void testInicializa() {
		c.inicializa(nome, populacao, capital, pais);
		assertEquals("Cidade.inicializa()",nome,c.nome());
		assertEquals("Cidade.inicializa()",capital,c.capital());
		assertEquals("Cidade.inicializa()",populacao,c.populacao());
		assertEquals("Cidade.inicializa()",pais,c.pais());
	}

	@Test
	public void testToString() {
		c=new Cidade( capital,  nome,  populacao,  pais);
		assertEquals("Cidade.toString()",c.toString(), "Cidade [capital=" + capital + ", nome=" + nome + ", populacao=" + populacao + ", pais=" + pais + "]\n");
	}

}
